// 发送请求
// 这个文件是对axios进行二次封装
// 目的是为了在整个项目时,发送ajax请求,通用的配置写在这里,不需要重复的发送请求

// 添加一个进度条的效果
import "nprogress/nprogress.css" // 引入对应的样式
// 下载引入nprogress
import NProgress from "nprogress"
import { getuserTempId } from "@/untils/getUserTempId"
import store from "@/store"
import axios from "axios"
// 创建axios实例
const ajax = axios.create({
  baseURL: "/api",
  // 此处的api,相当于,在vueconfig中的代理的地址,在拼接上发送请求的组件中 的地址,形成完整的路径地址,
  // 如果在此处添加api则,需要在发送请求的组件中,修改删除api,否者地址栏中会出现两个api,请求会发送失败
  timeout: 5000, // 设置超时时间
})

// 设置请求拦截器
ajax.interceptors.request.use(config => {
  // console.log(config)

  NProgress.start()
  // 开启进度条
  const token = store.state.user.userList.token
  config.headers.token = token
  // 在请求体中带上uuid,并且必须和接口文档中的参数一致,
  // config.headers==>这个是请求体
  config.headers.userTempId = getuserTempId()

  return config
})

// 设置响应拦截器
// 响应有两种情况,成功和失败,所以需要成功和失败的情况
ajax.interceptors.response.use(
  resOk => {
    //响应成功
    // console.log("响应成功了", resOk)
    // 关闭进度条
    NProgress.done()

    return resOk.data
  },
  error => {
    // 响应失败
    // console.log("响应失败", error)
    // return error
    // 这里需要返回一个promise对象,因为如果返回不是一个promise,则默认成功
    return Promise.reject(new Error(error.message))
  }
)

// 最后将对象导出,在需要发请求的时候使用
export default ajax
